오늘 한 일
- Android 앱개발
- Rust 만수무강 프로젝트
Kotlin 약알림
RecyclerView 아이템 순서 교환
상황 = 체크한 약은 아래로, 체크하지 않은 약은 위로 정렬하고 싶다.
방법 1. RecyclerView의 초기화 = RecyclerView 재생성
→ 체크할 때마다 Database 변경 & Data 재요청해서 처음 만들 때 정렬
database가 내장형이 아닌 상황에서 너무 오래걸림
item이 변경되는 애니메이션 이펙트의 적용을 할 수 없음
방법 2. itemView의 교환 = RecyclerView는 그대로
→ 체크할 때마다 item의 위치를 변경 & Data는 바꾼다는 신호만 보내고 기다리지 않음
RecyclerView를 초기화할 때 position이 val로 설정
= itemView의 position을 교환할 수 없음
itemView 교환하기
- position이 변하지 않는다 = itemView의 “View” 위치가 변하지 않는다
→ View 위치를 바꿀 수 없으니 바인딩될 Data의 위치를 바꾸는 것으로 해결
⇒ 체크할 때마다 해당 item이 바인딩될 위치를 결정 & 그 위치의 아이템과 교환
- RecyclerView의
View ~ Data 바인딩
이용
onCreateViewHolder()
: View 레이아웃 정의
onBindViewHolder()
: 데이터 바인딩
→ 바인딩 완료 후 notifyItemMoved(prev, next)
로 바인딩 새로고침 (View는 새로고침 안됨)
- data position 트래킹 & 고정된 View에 매핑
val indexManager: MutableList<Int> = (0..items.size - 1).toMutableList()
...
// data position 이용
val dataPosition = indexManager.indexOf(position)
val itemToMove = items.removeAt(dataPosition)
items.add(0, itemToMove)
notifyItemMoved(dataPosition, 0)
// 교환에 맞게 data position 트래킹
val indexToMove = indexManager.removeAt(dataPosition)
indexManager.add(0, indexToMove)
position을 값으로 가지는 List 생성
해당 List에서 position이 위치한 index가 현재 데이터 위치를 의미 == position처럼 사용
만수무강
에러 핸들링 로직구현
Alert 창이 없을 때 Alert 핸들링하는 경우
-> 해당 에러 확인 후 Ok(())
로 패스
Alert 창이 떠서 에러를 핸들링해야하는 경우
-> 발생가능한 동작에 에러 패턴매칭 후 AlertHandler 실행
-> 발생가능한 동작을 명확하게 구분하기 위해 기능에 따른 리팩토링 완료